package com.thinkgem.jeesite.common.pojo.runtime;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 根据传进来的 str 排序 flag true 升序排列 flase 降序排列
 * 
 * @author 曾令伟 用法:Collections.sort( Param410003List,new
 *         ListSort("double","BKC046",true));
 */
public class ListSort implements Comparator {

	public ListSort(String type, String str, boolean flag) {
		super();
		this.str = str;
		this.flag = flag;
		this.type = type;

	}

	public int compare(Object o1, Object o2) {
//		ValueObject p1 = (ValueObject) o1;
//		ValueObject p2 = (ValueObject) o2;
//
//		if (type.trim().toLowerCase().equals("double")) {
//			if (flag) {
//				if (p1.getDouble(str) >= p2.getDouble(str))
//					return 1;
//				else
//					return -1;
//			} else {
//				if (p1.getDouble(str) < p2.getDouble(str))
//					return 1;
//				else
//					return -1;
//			}
//
//		} else {
//			if (flag) {
//				if (p1.getString(str).compareTo(p2.getString(str)) >= 0)
//					return 1;
//				else
//					return -1;
//			} else {
//				if (p1.getString(str).compareTo(p2.getString(str)) < 0)
//					return 1;
//				else
//					return -1;
//
//			}
//		}
		return 0;
	}

//	@SuppressWarnings("unchecked")
//    public static Object sort(String... strArray) {
//		List<String> strList = (List<String>)BaseUtils.A2L((Object[])strArray);
//		ListSort.sort(strList);
//		return BaseUtils.L2A(strList);
//	}

	public static void sort(List<String> strList) {
		Collections.sort(strList, strComp);
	}

	public static Comparator<String> strComp = new Comparator<String>() {
		public int compare(String o1, String o2) { // 前面3个IF主要是判空的
			if (o1 == o2) {
				return 0;
			}
			if (o1 == null) {
				return 1;
			}
			if (o2 == null) {
				return -1;
			} // 这里没有做太多的判断, index代表第几个开始是数字, 直接从后面遍历 // 比如
			  // aa11,我们就会判断从下标[2]开始为不是数字, 就直接截取 [2] 后面, 即11
			int index = 0;
			for (index = o1.length() - 1; index >= 0
			        && (o1.charAt(index) >= '0' && o1.charAt(index) <= '9'); index--)
				;
			int num1 = Integer.parseInt(o1.substring(index + 1));
			for (index = o2.length() - 1; index >= 0
			        && (o2.charAt(index) >= '0' && o2.charAt(index) <= '9'); index--)
				;
			int num2 = Integer.parseInt(o2.substring(index + 1));
			return num1 - num2;
		}
//		public int compare(String o1, String o2) {
//			return o1.compareTo(o2);// 运用compareTo方法比较两个对象
//		}
	};

	public static Comparator<String> getStrComp() {
    	return strComp;
    }

	public static void setStrComp(Comparator<String> strComp) {
    	ListSort.strComp = strComp;
    }

	public String str;
	public boolean flag;
	public String type;

	public String getStr() {
    	return str;
    }

	public void setStr(String str) {
    	this.str = str;
    }

	public boolean isFlag() {
    	return flag;
    }

	public void setFlag(boolean flag) {
    	this.flag = flag;
    }

	public String getType() {
    	return type;
    }

	public void setType(String type) {
    	this.type = type;
    }
	
	public ListSort() {
		super();
	}

}